20 - 2.5.3 C-Kurzeinführung: Strukturen, Zeiger auf Funktionen [ID:15275]
50 von 210 angezeigt

Wir hatten uns in den letzten Abschnitten sehr intensiv mit dem Thema Zeiger und Felder und wie

sich das Ganze bei der Übergabe an Funktionen verhält beschäftigt. Und ich möchte jetzt noch

mal auf die andere Art von Verbunddatentypen, nämlich die Strukturen eingehen und die

Strukturen noch mal unter dem Aspekt der Übergabe an Funktionen und unter den Aspekten wie sie

im Zusammenhang mit Zeigern sich verhalten näher betrachten. Nehmen wir mal zwei Beispiele für

Strukturen her. Wir haben hier eine Struct Student, die besteht aus einem Feld, einem

Character-Feld-Nachname mit 25 Zeichen, einem Character-Feld-Vorname mit 25 Zeichen,

einem Character-Feld-Geburtsdatum mit 11 Zeichen, einem Integer-Matrikelnummer,

einem Shortwert-Gruppe und einem Character-Bestanden. Und eine zweite Struktur,

ein Struct-Komplex, die aus zwei Doubles besteht, nämlich einem Real- und einem

Imaginärteil. Diese zwei Strukturen werden wir jetzt in den nächsten Beispielen verwenden.

Und in diesem Abschnitt möchte ich auf das Thema Initialisierung von Strukturen noch mal eingehen.

Das hat jetzt mit Zeichern direkt gar nichts zu tun, aber der Vollständigkeit halber möchte

ich das jetzt hier an dieser Stelle noch mit einfügen. Dann geht es um die Fragestellung,

was passiert, wenn man Strukturen als Funktionsparameter übergibt. Das hatten

wir ja bei Feldern auch und hatten ja gesehen bei Feldern, dass sich Felder durchaus ja anders

verhalten wie normale Daten. Und hier werden wir wieder sehen, dass sich dieser verbundarten Typ

wiederum anders verhält. Dann geht es um Felder von Strukturen. Natürlich, wenn man einzelne

Strukturen hat und Strukturen mehr oder weniger schon wie normale Datentypen gehandhabt werden,

dann kann man natürlich auch Felder von Strukturen bilden. Und in dem Zusammenhang natürlich auch

wichtig, wie sieht es aus, wenn man Zeichn auf Strukturen hat. Das hatten wir ja auch schon mal

kurz uns angesehen. Strukturen können genauso wie Variablen und Felder bei der Definition

initialisiert werden. Und die Zuordnung zu den Komponenten erfolgt entweder aufgrund der Reihenfolge

der Nennung der Komponenten. Das wäre dann analog zur Initialisierung bei den Feldern. Oder auf

grund des angegebenen Namens. Das ist in neueren C Varianten, also Azeit C 99, eine alternative

Möglichkeit. Interessanterweise ist es so, dass in C++ die Initialisierung aufgrund der Reihenfolge

möglich ist. Ungenannte Komponenten werden mit Null initialisiert. Auch das ist wieder ähnlich

wie bei den Feldern. Wenn wir jetzt also so eine Strukt-Student haben, wie wir sie auf der letzten

Seite eingeführt haben, jetzt mal konkret definieren unter dem Namen Stud1, dann könnte

man die initialisieren. Und die Initialisierung erfolgt auch wieder, indem man in geschweiften

Klammern die einzelnen Initialisierungskomponenten angibt. Und der Nachname würde dann mit Maya

initialisiert werden. Das ist also eine richtige Feldinitialisierung. Das heißt also diese Zeichen

Mi, Er und der Nullcharakter werden in dieses 25er Array-Nachname hineinkopiert. In Vorname wird

Hans hineinkopiert, in das Geburtsdatum wird 24.01.1970 hineinkopiert. Die Matrikelnummer wird mit dem Wert 1533180

als Integerwert initialisiert. Der Shortwertgruppe wird mit 5 initialisiert und der Charakter

bestanden wird mit einem N, also steht wohl für nein, initialisiert. Die Struct-Komplex könnte man

analog initialisieren. Wenn wir also jetzt eine Struct-Komplex C1 anlegen, dann könnte ich die

initialisieren mit den Werten 1,2 und 0,8, das reale und imaginär Teil. Ich könnte sie aber auch

durch explizite Nennung dieser beiden Komponenten initialisieren. Ich könnte also sagen, der reale

Teil ist 0,5 und der imaginär Teil ist 0,33. Der Vorteil von dieser zweiten Art der Initialisierung

ist, wenn sich dann die Struktur-Deklaration ändert und möglicherweise weitere Komponenten eingeführt

werden, sich die Reihenfolge der Komponenten ändert, dann funktioniert diese Initialisierung

immer noch, ohne dass man sie anpassen müsste. Bei einer Initialisierung, so wie wir es hier oben

gemacht haben von dieser Struct Student, würde das nicht mehr funktionieren, wenn wir beispielsweise

zwischen Nachnamen und Vornamen noch ein weiteres kleines Array Initialen einfügen würden. Dann

würde anschließend diese konkrete Initialisierung schiefgehen, weil die Zuordnung einfach nicht mehr

passt. Dann würde Meier dem Nachnamen zugeordnet werden, Hans würde Initial hineinkopieren werden,

24.01.1970 in den Vornamen und an dieser Stelle würde es nicht mehr passen, weil hier haben wir

ein Integer und wir würden eigentlich ein Charakter Array erwarten. Also bei Zugriffen auf eine Struktur

werden die Komponenten immer durch die Komponentennamen identifiziert, aber bei der

Teil einer Videoserie :

Zugänglich über

Offener Zugang

Dauer

00:22:48 Min

Aufnahmedatum

2020-05-07

Hochgeladen am

2020-05-07 19:56:10

Sprache

de-DE

Einbetten
Wordpress FAU Plugin
iFrame
Teilen